package com.reverse.engineering.util.core.run.util.interfaces;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

/**
 * Database工具类接口
 * 
 * @author liu
 * @Date 2020-06-15 14:45:59
 * @Description
 *
 */
public interface DatabaseUtilsInterface {

    /**
     * 执行Sql插入语句
     * 
     * @param sql Sql语句
     * @param obj 参数
     * @return
     * @throws SQLException
     */
    int insert(String sql, Object obj[]) throws SQLException;

    /**
     * 执行Sql插入语句(长连接)
     * 
     * @param object
     * @param sql Sql语句
     * @param obj 参数
     * @return
     * @throws SQLException
     */
    int insert(Object object, String sql, Object obj[]) throws SQLException;

    /**
     * 执行Sql更新语句
     * 
     * @param sql Sql语句
     * @param obj 参数
     * @return
     * @throws SQLException
     */
    int executeUpdate(String sql, Object obj[]) throws SQLException;

    /**
     * 执行Sql更新语句(长连接)
     * 
     * @param conn
     * @param sql Sql语句
     * @param obj 参数
     * @return
     * @throws SQLException
     */
    int executeUpdate(Object conn, String sql, Object obj[]) throws SQLException;

    /**
     * 执行Sql查询语句
     * 
     * @param sql Sql语句
     * @param obj 参数
     * @return
     * @throws SQLException
     */
    List<HashMap<String, Object>> executeQuery(String sql, Object obj[]) throws SQLException;

    /**
     * 执行Sql查询语句(长连接)
     * 
     * @param conn
     * @param sql Sql语句
     * @param obj 参数
     * @return
     * @throws SQLException
     */
    List<HashMap<String, Object>> executeQuery(Object conn, String sql, Object obj[]) throws SQLException;

    /**
     * 获取连接对象
     * 
     * @return
     * @throws SQLException
     */
    Object getConnection() throws SQLException;

    /**
     * 获取连接对象
     * 
     * @param url 数据库路径
     * @param username 数据库帐号
     * @param password 数据库密码
     * @return
     * @throws SQLException
     */
    Object getConnection(String url, String username, String password) throws SQLException;

    /**
     * 获取连接对象
     * 
     * @param url 数据库路径
     * @param port 端口号
     * @param username 数据库帐号
     * @param password 数据库密码
     * @return
     * @throws SQLException
     */
    Object getConnection(String url, int port, String username, String password) throws SQLException;

    /**
     * 关闭连接(单个连接,顶级连接,比如:一级连接)
     * 
     * @param conn 要关闭的对象
     * @throws SQLException
     */
    void utilsCloseOne(Object conn) throws SQLException;

    /**
     * 关闭连接(一组连接,比如:三级连接,二级连接,一级连接...)
     * 
     * @param conn 要关闭的对象集合
     * @throws SQLException
     */
    void utilsClose(Object... conn) throws SQLException;

    /**
     * 关闭连接(多组连接,每组除顶级外都是List,顶级是一个Object,比如:{三级连接...},{二级连接...},顶级连接)
     * 
     * @param conn 要关闭的对象集合
     * @throws SQLException
     */
    void utilsCloseList(Object... conn) throws SQLException;

}